package com.management.department.teacherinfosystem.Service;

import com.management.department.teacherinfosystem.DTO.CourseHoursSubmitDTO;
import com.management.department.teacherinfosystem.DTO.CourseHoursDTO;
import com.management.department.teacherinfosystem.Entity.CourseHours;
import java.util.List;

public interface CourseHoursService {
    
    // 创建教学课时
    CourseHours createCourseHours(CourseHoursSubmitDTO dto, Long createdBy);
    
    // 更新教学课时
    CourseHours updateCourseHours(Long id, CourseHoursSubmitDTO dto);
    
    // 删除教学课时
    void deleteCourseHours(Long id);
    
    // 根据ID获取教学课时
    CourseHours getCourseHoursById(Long id);
    
    // 根据ID获取教学课时DTO
    CourseHoursDTO getCourseHoursDTOById(Long id);
    
         // 获取我的教学课时（包括创建的和作为成员的）
     List<CourseHours> getMyCourseHours(Long userId);
     
     // 获取我的教学课时DTO（包括创建的和作为成员的）
     List<CourseHoursDTO> getMyCourseHoursDTO(Long userId);
    
    // 获取所有教学课时
    List<CourseHours> getAllCourseHours();
    
    // 获取所有教学课时DTO
    List<CourseHoursDTO> getAllCourseHoursDTO();
    
    // 根据学年学期获取教学课时
    List<CourseHours> getCourseHoursByAcademicYear(String academicYear);
    
    // 根据学年学期获取教学课时DTO
    List<CourseHoursDTO> getCourseHoursDTOByAcademicYear(String academicYear);
    
         // 根据教师姓名获取教学课时（包括作为成员的）
     List<CourseHours> getCourseHoursByUserName(String userName);
     
     // 根据教师姓名获取教学课时DTO（包括作为成员的）
     List<CourseHoursDTO> getCourseHoursDTOByUserName(String userName);
     
     // 根据教师姓名和学年学期获取教学课时
     List<CourseHours> getCourseHoursByUserNameAndAcademicYear(String userName, String academicYear);
     
     // 根据教师姓名和学年学期获取教学课时DTO
     List<CourseHoursDTO> getCourseHoursDTOByUserNameAndAcademicYear(String userName, String academicYear);
    
    // 统计指定学年学期的总标准课时量
    Double getTotalStandardHoursByAcademicYear(String academicYear);
    
    // 统计指定学年学期的总折合课时量
    Double getTotalConvertedHoursByAcademicYear(String academicYear);
    
    // 统计指定用户的总标准课时量
    Double getTotalStandardHoursByUserId(Long userId);
    
    // 统计指定用户的总折合课时量
    Double getTotalConvertedHoursByUserId(Long userId);
    
    // 获取所有教师列表（用于筛选）
    List<Object> getTeachersList();
}
